Обучение с учителем. Классификация. Дискриминантный анализ. Логистическая регрессия. Метод опорных векторов. Выбор модели с помощью кросс-валидации. Метод стохастического градиента

Выполнили: Редкокош Кирилл, Белкова Анна, Лобанова Полина

Подключаем все необходимые библиотеки (и заодно что-то лишнее, вдруг пригодится):

Первичная обработка данных

Запишем данные в dataframe, переменную "качество" будем рассматривать как классифицирующую (на 2 класса- качество вина ниже 6 или выше) и выведем первые 5 строк:

Удалим из рассмотрения free.sulfur.dioxide, так как есть total.sulfur.dioxide и удалим citric.acid, так как есть fixed.acidity.

Проверим соотношение классов:

Представим наши данные на парном графике:

Прологарифмируем 1, 3, 4, 5, 8, 9. И снова изобразим данные, теперь уже с расскраской по нашей классифицирующей переменной:

Наблюдаем несколько выбросов, удалим их:

Дискриминантный анализ

Предположим, что ковариационные матрицы двух групп равны и проведем линейный дискриминантный анализ.

Так как классы достаточно сбалансированы, то мы можем использовать accuracy как метрику качества классификации.

Точность на тестовом наборе около 74%.

Проверим значимость дискриминации.

p-value во всех случаях близок к 0, гипотеза о значимости не отвергается.

Предположим, что ковариационные матрицы двух групп различны и проведем квадратичный дискриминантный анализ.

Качество классификации на тестовом наборе немного уменьшилось в сравнении с lda. При этом стоит помнить, что для этого нам понадобилось оценить намного больше параметров.

Перейдем к модели наивного байесовского классификатора:

Эта модель показала лучший результат.

Метод опорных векторов

Для начала попробуем классический SVС (с линейной разделяющей плоксотью)

В качестве одного из параметров мы можем выбрать ядро. В реализации sklearn помимо линейного ядра можно выбрать радиальное, полиномиальное, сигмовидное ядро или написать свою функцию. Поскольку ярко выраженной зависимости в данных не наблюдается, попробуем нелинейные ядра.

Таким образом, в данной задаче лучше всех себя показали алгоритмы с полиномиальным и линейным ядром.

Логистическая регрессия

Попробуем построить модель с разными методами оптимизации. Метод Ньютона-Рафсона:

Метод стохастического градиента:

Coordinate Descent (CD) algorithm:

По умолчанию --- метод Limited-memory Broyden–Fletcher–Goldfarb–Shanno Algorithm (solver = 'lbfgs'). Аналог метода Ньютона, но гессиан вычисляется приближенно.

Оставим вариант по умолчанию, так как он показал наилучшие результаты.

Resampling

Искусствено уравняем число индивидов в классах.

Исходная выборка:

Случайная наивная избыточная выборка:

Качество классификации стало немного выше, чем при использовании наивного байессовского классфикатора к исходной выборке.

Результаты совпадают со случайной избыточной выборкой.

Результаты совпадают со случайной избыточной выборкой.

Resampling незначительно улучшил качество классификации во всех трех случаях.

Cross-validation

Будем рассматривать модель наивного байесовского классификатора с различными cv.

Во всех случаях при кросс-валидации accuracy ≈ 73.5%.